package com.iakuil.app.common.db;

import com.github.pagehelper.parser.SqlParser;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParser;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 可配置超时时间的SqlParser
 *
 * <p>适配PageHelper插件，默认5秒超时。
 *
 * @author Kai
 */
public class TimeoutSqlParser implements SqlParser {

    ExecutorService timeOutService = Executors.newWorkStealingPool(Runtime.getRuntime().availableProcessors() * 2);

    @Override
    public Statement parse(String sql) throws JSQLParserException {
        // JSqlParser 4.8以后可以直接传入timeOutService
        CCJSqlParser parser = CCJSqlParserUtil.newParser(sql)
            .withSquareBracketQuotation(true);
        return CCJSqlParserUtil.parseStatement(parser, timeOutService);
    }
}
